﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Helena.Areas.Productos.Models;
using Telerik.Web.Mvc;
using Helena.Areas.Categorias.Models;
using Helena.Areas.Campanas.Models;
using Helena.Areas.Configuraciones.Models;
using System.Threading;
using System.IO;
using System.Text;
using Helena.Areas.Vendedores.Models;

namespace Helena.Areas.Productos.Controllers
{
    public class DetalleProductoController : Controller
    {
        LogicaProducto db = new LogicaProducto();
        LogicaCategoria cat_db = new LogicaCategoria();
        LogicaCampana cam_db = new LogicaCampana();
        LogicaUnidad uni_db = new LogicaUnidad();


        //
        // GET: /Productos/DetalleProducto/

        #region SubDetalle




        public ActionResult Index()
        {
            ObtenerProductos();
            ObtenerUnidades();
            ObtenerCategorias();
            ObtenerCampanas();

            int ProductoID = Convert.ToInt16(Session["ProductoBase"].ToString());

            ViewData["ProductoSeleccionado"] = db.i_RetornarProducto(ProductoID);
            ViewData["DetalleProducto"] = db.i_RetornarProductos();

            return View();
        }

        [GridAction]
        public ActionResult ObtenerCategoria()
        {
            return View(new GridModel<CategoriaView>
            {
                Data = cat_db.i_RetornarCategorias()
            });
        }

        [GridAction]
        public ActionResult ObtenerProductos(String CategoriaNombre)
        {
            CategoriaNombre = CategoriaNombre ?? "Basicos";
            int CategoriaID = cat_db.i_RetornarCategorias().Where(p => p.NombreCategoria == CategoriaNombre).FirstOrDefault().ID;
            
            List<ProductoView> consulta = db.i_RetornarProductos().Where(p => p.categoriaID == Convert.ToInt16(CategoriaID)).ToList();
            List<ProductoView> salida = new List<ProductoView>();
            
            foreach(ProductoView s in consulta)
            {
                s.cantidad=0;
                salida.Add(s);
            }
            return View(new GridModel<ProductoView>
            {
                Data = salida
            });
        }

        [GridAction]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult InsertarDetalle(ProductoView detalle)
        {
            int ID = Convert.ToInt16(Session["ProductoBase"].ToString());
            ProductoView aux_p = db.i_RetornarProducto(detalle.ID);
            aux_p.cantidad = detalle.cantidad;

            DetalleProductoView d = new DetalleProductoView();
            d.ProductoCID=ID;
            d.ProductoSID = aux_p.ID;
            d.UnidadID = aux_p.unidadID;
            d.Cantidad = aux_p.cantidad;
            d.Estado = aux_p.Estado;
            d.PrecioVenta = aux_p.precioventa;
            db.AgregarDetalleaProducto(ID,d);

            List<DetalleProductoView> salida = db.DetallesDeUnProducto(ID);

            return View(new GridModel(salida));
        }

        [GridAction]
        public ActionResult ObtenerDetalles()
        {
            int ProductoID = Convert.ToInt16(Session["ProductoBase"].ToString());

            ViewData["DetalleProducto"] = db.i_RetornarProductos(); 
            
            List<DetalleProductoView> dl = db.DetallesDeUnProducto(ProductoID);
            return View(new GridModel(dl));
        }

        [GridAction]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult ModificarDetalle(DetalleProductoView detalle)
        {
            int ProductoID = Convert.ToInt16(Session["ProductoBase"].ToString());
            detalle.ProductoCID = ProductoID;
            db.i_ModificarDetalle(ProductoID, detalle);

            List<DetalleProductoView> dl = db.DetallesDeUnProducto(ProductoID);
            return View(new GridModel(dl));
        }

        [GridAction]
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult EliminarDetalle(DetalleProductoView detalle)
        {
            int ProductoID = Convert.ToInt16(Session["ProductoBase"].ToString());
            detalle.ProductoCID = ProductoID;
            db.i_EliminarDetalle(ProductoID, detalle);

            List<DetalleProductoView> dl = db.DetallesDeUnProducto(ProductoID);
            return View(new GridModel(dl));
        }
  
        #endregion

        #region Extras

        private void ObtenerCategorias()
        {
            ViewData["Categorias"] = cat_db.i_RetornarCategorias();
            //db.context_publico.t_Categorias
            //.Select(e => new { ID = e.ID, Nombre = e.NombreCategoria })
            //.OrderBy(e => e.Nombre).ToList();        
        }

        private void ObtenerCampanas()
        {
            ViewData["Campanas"] = cam_db.i_RetornarCampanas();
        }

        private void ObtenerUnidades()
        {
            ViewData["Unidades"] = uni_db.i_RetornarUnidades();
        }

        private void ObtenerProductos()
        {
            List<ProductoView> consulta = db.i_RetornarProductos().Where(p => p.categoriaID == 1).ToList();
            List<ProductoView> salida = new List<ProductoView>();

            foreach (ProductoView s in consulta)
            {
                s.cantidad = 0;
                salida.Add(s);
            }
            ViewData["Productos"] = salida;
        }

        #endregion

    }
}
